/*
 * @Author: 0x9DEFA478
 * @Date: 2021-09-19 16:39:12
 * @LastEditTime: 2021-12-17 23:11:03
 * @LastEditors: 0x9DEFA478
 * @Description: 
 * QQ:2652450237
 * ============================================================================================================================================
 * 
 * 
 * 
 *                                                                                               ************      ****************************
 *                                                                                             ************      ****************************  
 *                                                                                           ************      ****************************    
 *                                                                                         ************      ****************************      
 *                                                                                       ************      ************                        
 *                                                                                     ************      ************                          
 *                                                                                   ************      ************                            
 *                                                                                 ************      ************                              
 *                                                                               ************      ************                                
 *                                                                             ************      ************                                  
 *                                                                           ************      ************                                    
 *                                                                         ************      ************                                      
 *                                                                       ************      ************                                        
 *                                                                     ************      ************                                          
 *                                                                   ************      ************                                            
 *                                                                 ************      ************                                              
 *                                                               ************      ************                                                
 *                                                             ************      ************                                                  
 *                                                           ************      ************                                                    
 *                                                         ************      ************                                                      
 *                                                       ************      ************                                                        
 *                                                     ************      ************                                                          
 *                                                   ************      ************                                                            
 *                                                 ************      ************                                                              
 *                                               ************      ************                                                                
 *                                             ************      ************                                                                  
 *                                           ************      ************                                                                    
 *                                         ************      ************                                                                      
 *                                       ************      ************                                                                        
 *                                     ************      ************                                                                          
 *                                   ************      ************                                                                            
 *                                 ************      ************                                                                              
 *                               ************      ************                                                                                
 *                             ************      ************                                                                                  
 *                           ************      ************                                                                                    
 *                         ************      ************                                                                                      
 *       ****************************      ************                                                                                        
 *     ****************************      ************                                                                                          
 *   ****************************      ************                                                                                            
 * ****************************      ************                                                                                              
 * 
 * 
 * 
 * ============================================================================================================================================
 * 
 */
#include "IP_MDMA.h"



/**
 * @brief MDMA中断调用
 * @param v IP_MDMA_Golbal句柄
 * @return 无
 */
void IP_MDMA_IRQ(void* v){
  IP_MDMA_Golbal* ip_mdma_golbal;
  //unsigned int Msk;
  unsigned int GISR0;
  int Channelx;

  ip_mdma_golbal=v;
  
  GISR0=ip_mdma_golbal->Instance.Instance->GISR0&((0x1U<<vIP_MDMA_Golbal_NumOfChannel)-1U);

  // Channelx=vIP_MDMA_Golbal_NumOfChannel-1;
  // Msk=0x1U<<Channelx;
  // while(Msk!=0U){
  //   if((Msk&GISR0)!=0U){
  //     ip_mdma_golbal->Callbacks[Channelx].Callback(ip_mdma_golbal->Callbacks[Channelx].v);
  //   }
  //   Channelx--;
  //   Msk>>=1;
  // }

  while(GISR0!=0U){
    Channelx=31-__CLZ(GISR0);
    GISR0&=(~(0x1U<<Channelx));
    ip_mdma_golbal->Callbacks[Channelx].Callback(ip_mdma_golbal->Callbacks[Channelx].v);
  }

}

/**
 * @brief 设置中断回调
 * @param ip_mdma IP_MDMA句柄
 * @param Callback 中断回调
 * @param v 中断回调传入的参数
 * @return 无
 */
void IP_MDMA_SetChannelIrqCallback(IP_MDMA* ip_mdma,void (*Callback)(void*),void* v){

  ip_mdma->mdma_golbal->Callbacks[ip_mdma->Channelx].v=v;
  ip_mdma->mdma_golbal->Callbacks[ip_mdma->Channelx].Callback=Callback;
}

/**
 * @brief 挂载传输链表
 * @param ip_mdma IP_MDMA句柄
 * @param List 链表信息
 * @return 无
 */
void IP_MDMA_LoadList(IP_MDMA* ip_mdma,IP_MDMA_TransferList* List){

  if((ip_mdma->Instance.Instance->CCR&MDMA_CCR_EN)!=0){
    return;
  }

  if(List->TBR.Bit.DBUS==0x1U){
    if((List->TCR.Bit.DINCOS==0x3U)||(List->TCR.Bit.DINC==0x0U)||(List->TCR.Bit.DINCOS!=List->TCR.Bit.DSIZE)){
      List->TCR.Bit.DBURST=0x0U;
    }
  }else{
    if(List->TCR.Bit.DINC==0x0U){
      List->TCR.Bit.DBURST=0x4U;
    }
  }

  if(List->TBR.Bit.SBUS==0x1U){
    if((List->TCR.Bit.SINCOS==0x3U)||(List->TCR.Bit.SINC==0x0U)||(List->TCR.Bit.SINCOS!=List->TCR.Bit.SSIZE)){
      List->TCR.Bit.SBURST=0x0U;
    }
  }else{
    if(List->TCR.Bit.SINC==0x0U){
      List->TCR.Bit.SBURST=0x4U;
    }
  }

  ip_mdma->Instance.Instance->CTCR=List->TCR.Val;
  ip_mdma->Instance.Instance->CBNDTR=List->BNDTR.Val;
  ip_mdma->Instance.Instance->CSAR=List->SAR.Val;
  ip_mdma->Instance.Instance->CDAR=List->DAR.Val;
  ip_mdma->Instance.Instance->CBRUR=List->BRUR.Val;
  ip_mdma->Instance.Instance->CTBR=List->TBR.Val;
  ip_mdma->Instance.Instance->CMAR=List->MAR.Val;
  ip_mdma->Instance.Instance->CMDR=List->MDR.Val;
}



